package com.ftwj.demo.utils.file;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.ftwj.demo.utils.StringHelper;
import com.ftwj.demo.utils.exception.FileException;
import com.ftwj.demo.utils.logs.LoggerUtil;


/**
*
* <p>Title: FileUtils</p>  
* <p>Description: 文件常用信息获取工具类，其他常用方法请访问：http:www.hutool.com</p>
* <p>Copyright: Copyright (c) 2020 </p>  
* <p>Company: 兰州飞天网景信息产业有限公司</p>    
* @author WangSLi
* @date 2020年2月14日 下午5:34:50
* @version V1.0
 */
public class FileUtils {
	
	/**
	 * 
	 * @Title: getFilePrefix
	 * @Description: 获取文件名(文件前缀)
	 * @author: WangShengLi
	 * @param filePath
	 * @return
	 * @return: String
	 */
	public static String getFilePrefix(String filePath) {
		if(filePath==null) {
			LoggerUtil.info(filePath+"->文件路径参数为空！");
			throw new FileException("文件路径参数为空！");
		}
		LoggerUtil.info(filePath);
		if(filePath.lastIndexOf("\\")!=-1) {
			filePath=filePath.substring(filePath.lastIndexOf("\\")+1);
			LoggerUtil.info("文件名是->"+filePath);
		}
		int index = filePath.lastIndexOf(".");
		return filePath.substring(0,index);
	    //String[] strArray = filePath.split("\\.");
        //return strArray[strArray.length -1];
	}
	
	/**
	 * 
	 * @Title: getFileSuffix
	 * @Description:根据文件路径获取文件扩展名（文件后缀）
	 * @author: WangShengLi
	 * @param filePath
	 * @return
	 * @return: String
	 */
	public static String getFileSuffix(String filePath) {
		if(filePath==null) {
			LoggerUtil.info(filePath+"->文件路径参数为空！");
			throw new FileException("文件路径参数为空！");
		}
		int index = filePath.lastIndexOf(".");
		if(index==-1) {
			LoggerUtil.info(filePath+"->该文件没有后缀名！");
			throw new FileException("该文件没有后缀名！");
		}
		String suffix=filePath.substring(index+1);
		return suffix;
	    //String[] strArray = filePath.split("\\.");
        //return strArray[strArray.length -1];
	}
	
	/**
	 * 
	 * @Title: getFileSuffix
	 * @Description: 获取文件所在文件夹路径
	 * @author: WangShengLi
	 * @param filePath
	 * @return
	 * @return: String
	 */
	public static String getFolderPath(String filePath) {
		if(filePath==null) {
			LoggerUtil.info(filePath+"->文件路径参数为空！");
			throw new FileException("文件路径参数为空！");
		}
		//int index = filePath.lastIndexOf("\\");
		//return filePath.substring(0,index+1);
	    //String[] strArray = filePath.split("\\.");
        //return strArray[strArray.length -1];
		File file=new File(filePath);
		return file.getParent();
	}
	
	/**
	 * 
	 * @Title: getFileSuffix
	 * @Description: 获取文件名，与getFilePrefix直接截取路径的方式不同，此方法从文件中获取
	 * @author: WangShengLi
	 * @param filePath
	 * @return
	 * @return: String
	 */
	public static String getFileName(String filePath) {
		if(filePath==null) {
			LoggerUtil.info(filePath+"->文件路径参数为空！");
			throw new FileException("文件路径参数为空！");
		}
		//int index = filePath.lastIndexOf("\\");
		//return filePath.substring(0,index+1);
	    //String[] strArray = filePath.split("\\.");
        //return strArray[strArray.length -1];
		File file=new File(filePath);
		return file.getName();
	}
	
	/**
	 * 
	 * @Title: getListFileNames
	 * @Description: 获取该路径下的文件列表（只获取当前目录下的文件，且包括文件夹）
	 * @author: WangShengLi
	 * @param path
	 * @return
	 * @return: List<String>
	 */
	public static List<Map<String, Object>> getListFileNames(String path){
		if(StringHelper.isEmpty(path)) {
			LoggerUtil.info(path+"->文件夹路径不正确");
			throw new FileException("请选择正确的文件夹路径");
		}
		List<Map<String,Object>> list=new ArrayList<>();
		File file =new File(path);
		File[] files = file.listFiles();
		if(files!=null) {
			for (File data : files) {
				Map<String,Object> map=new HashMap<String, Object>();
				map.put("path", data.getPath().replace("\\", "/"));
				map.put("name", data.getName());
				map.put("type", data.isFile()==true?"File":"Dir");
				list.add(map);
			}
		}
		return list;
	}
	
	//TODO 获取该路径下的文件列表
	
	/**
	 * 
	 * @Title: getListDirNames
	 * @Description: 递归获取该路径下的文件夹(只获取文件夹)
	 * @author: WangShengLi
	 * @param path
	 * @param list
	 * @return
	 * @return: List<Map<String,String>>
	 */
	public static List<Map<String,Object>> getListDirNames(String path,List<Map<String, Object>> list) {
		List<Map<String, Object>> files = getListFileNames(path);
		for (Map<String, Object> map : files) {
			String childpath=map.get("path").toString();
			boolean isDir=childpath==null?false:(new File(childpath)).isDirectory();
			if(isDir) {
				LoggerUtil.info(map.toString());
				list.add(map);
				getListDirNames(childpath,list);
			}
		}
		return list;
	}
	
	/**
	 * 
	 * @Title: getListFileRecNames
	 * @Description: 递归获取该路径下的文件列表（包括文件夹）
	 * @author: WangShengLi
	 * @param path
	 * @return
	 * @return: List<String>
	 */
	public static List<Map<String,Object>> getListFileRecNames(String path){
		if(StringHelper.isEmpty(path)) {
			LoggerUtil.info(path+"->文件夹路径不正确");
			throw new FileException("请选择正确的文件夹路径");
		}
		List<Map<String,Object>> list=new ArrayList<>();
		File file =new File(path);
		File[] files = file.listFiles();
		if(files!=null) {
			for (File data : files) {
				Map<String,Object> map=new HashMap<String, Object>();
				String dataPath=data.getPath().replace("\\", "/");
				String dataName=data.getName();
				boolean isFile=data.isFile();
				map.put("path", dataPath);
				map.put("name", dataName);
				map.put("file", isFile);
				list.add(map);
				if(!isFile) {
					List<Map<String, Object>> recursion = getListFileRecNames(dataPath);
					list.addAll(recursion);
				}
			}
		}
		return list;
	}

	public static void main(String[] args) throws FileNotFoundException {
		getListDirNames("C:\\custom",new ArrayList<Map<String, Object>>());
		
	}
}
